package singletontest;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * 什么是立即加载？立即加载就是使用类的时候已经将对象创建完毕，常见的实现办法就是直接 new 实例化。
 *
 * @author liuziyang
 * @create 2019-10-14 19:58
 */
public class SingletonTest1 {
    private static SingletonTest1 myObject = new SingletonTest1();

    public SingletonTest1() {

    }

    public static SingletonTest1 getInstance() {
        return myObject;
    }

    /**
     * 控制台打印的 hashCode 是同一个值，说明对象是同一个，也就实现了立即加载型单例设计模式。
     * <p>
     * 此版本的缺点是不能有其他其他实例变量，因为getInstance()方法没有同步，所以有可能出现非线程安全问题。
     *
     * @param args
     */
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(SingletonTest1.getInstance().hashCode());
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(SingletonTest1.getInstance().hashCode());
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(SingletonTest1.getInstance().hashCode());
            }
        }).start();
    }
}
